class Wathcer {
    constructor(vm, expr, cb) {
        this.$data = vm.$data   // 数据源
        this.expr = expr        // 数据的索引,这是一个字符串 例如: 'jack.father.name'
        this.cb = cb            // 回调函数
        this.put_into(this.$data, this.expr)
    }
    // 将wather放入订阅列表, [watcher, watcher, watcher...]
    put_into(data, expr) {
        let arr = expr.split('.')
        arr.reduce((y, item, index)=>{
            if (index===arr.length-1){
                Dep.target=this             // 锁定
                this.value = y[item]        // 发射
                Dep.target=null             // 解除锁定
            } else return y[item]
        }, data)
    }
    // 重新渲染数据
    update() {
        this.cb()
    }
}